﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QLVatTu.Class;
using System.Globalization;

namespace QLVatTu.NghiepVu
{
    public partial class frmThemPhieuXuatKhachHang : Form
    {

        KetNoiDB cn = new KetNoiDB();
        public string MaPhieuXuat = "";

        public frmThemPhieuXuatKhachHang()
        {
            InitializeComponent();
        }

        private void loadData()
        {
            cbbLoaiPhieu.DataSource = cn.getTable("select * from tbl_LoaiPhieu where MaLoaiPhieu='LP005'");
            cbbLoaiPhieu.DisplayMember = "TenLoaiPhieu";
            cbbLoaiPhieu.ValueMember = "MaLoaiPhieu";

            cbbKhoXuat.DataSource = cn.getTable("select * from tbl_Kho");
            cbbKhoXuat.DisplayMember = "TenKho";
            cbbKhoXuat.ValueMember = "MaKho";

            cbbDoiTac.DataSource = cn.getTable("select * from tbl_DoiTac where KhachHang='True'");
            cbbDoiTac.DisplayMember = "TenDoiTac";
            cbbDoiTac.ValueMember = "MaDoiTac";

            VatTu.DataSource = cn.getTable("select * from tbl_VatTu");
            VatTu.DisplayMember = "TenVatTu";
            VatTu.ValueMember = "MaVatTu";

            cbbXacNhan.SelectedIndex = 0;

            if (MaPhieuXuat == "")
            {
                //Thêm
                txtSoPhieu.Text = cn.SinhMa("SoPhieu", "tbl_PhieuXuatKho", "PX");
            }
            else
            {
                //Sửa
                btnThem.Enabled = true;

                //load thông tin phiếu xuất
                string sql = "select * from tbl_PhieuXuatKho where SoPhieu='"+MaPhieuXuat+"'";
                DataTable tbl = cn.getTable(sql);
                if (tbl.Rows.Count > 0)
                {
                    txtSoPhieu.Text = MaPhieuXuat;
                    dtpNgayLap.Value = DateTime.Parse(tbl.Rows[0]["NgayXuat"].ToString());
                    cbbLoaiPhieu.SelectedValue=tbl.Rows[0]["MaLoaiPhieu"].ToString();
                    txtNhanVien.Text = tbl.Rows[0]["NguoiXuat"].ToString();
                    cbbDoiTac.SelectedValue = tbl.Rows[0]["MaDoiTac"].ToString();
                    txtDienGiai.Text = tbl.Rows[0]["DienGiai"].ToString();
                    cbbKhoXuat.SelectedValue = tbl.Rows[0]["MaKho"].ToString();
                }

                //load dgvChiTiet
                sql = @"SELECT     MaVatTu, MaDonViTinh, SoLuongPhePham
                        FROM         dbo.tbl_ChiTietPhieuXuat
                        WHERE     SoPhieu = '"+MaPhieuXuat+"'";
                DataTable dt = cn.getTable(sql);
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        DataGridViewRow dgvr =(DataGridViewRow)dtgChiTietVatTu.Rows[0].Clone();
                        dgvr.Cells[1].Value=dr["MaVatTu"].ToString();
                        dgvr.Cells[2].Value=dr["MaDonViTinh"].ToString();

                        sql=@"SELECT     SUM(SoLuongPhePham) as SoLuongTonKho
                            FROM         dbo.tbl_LuuKho
                            WHERE MaKho = '" + cbbKhoXuat.SelectedValue.ToString() + "' AND MaVatTu = '" + dr["MaVatTu"].ToString() + "' and SoPhieu!='"+MaPhieuXuat+"'";
                        dgvr.Cells[3].Value=float.Parse(cn.LayDuLieu(sql));
                        dgvr.Cells[4].Value=dr["SoLuongPhePham"].ToString();
                        dtgChiTietVatTu.Rows.Add(dgvr);
                    }
                }
            }

        }

        private void frmThemPhieuXuatKhachHang_Load(object sender, EventArgs e)
        {
            if (cn.KetNoi())
            {
                loadData();
            }
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private bool kiem_tra_lap_vat_tu(int rowIndex)
        {
            foreach (DataGridViewRow dgvr in dtgChiTietVatTu.Rows)
            {
                if (dgvr.IsNewRow) continue;

                if (dgvr.Index != rowIndex && dgvr.Cells[1].Value != null && dgvr.Cells[1].Value.ToString() == dtgChiTietVatTu.Rows[rowIndex].Cells[1].Value.ToString())
                {
                    dgvr.Cells[1].ErrorText = "Lỗi: " + dtgChiTietVatTu.Columns[1].HeaderText + " đã được chọn ";
                    dtgChiTietVatTu.Rows[rowIndex].Cells[1].ErrorText = "Lỗi: " + dtgChiTietVatTu.Columns[1].HeaderText + " đã được chọn ";
                    return false;
                }
                else
                {
                    dgvr.Cells[1].ErrorText = "";
                    dtgChiTietVatTu.Rows[rowIndex].Cells[1].ErrorText = "";
                }
            }
            return true;
        }

        private bool IsValid()
        {
            bool kt = true;
            if (cbbKhoXuat.SelectedValue == null)
            {
                MessageBox.Show("Bạn chưa chọn kho.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cbbKhoXuat.Focus();
                kt = false;
            }
            else if (txtNhanVien.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập tên người lập phiếu.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtNhanVien.Focus();
                kt = false;
            }
            else if (dtgChiTietVatTu.Rows.Count <= 1)
            {
                MessageBox.Show("Bạn chưa nhập thông tin vật tư.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dtgChiTietVatTu.Focus();
                kt = false;
            }
            else
            {
                string sql = "select MIN(NgayCapNhat) from tbl_LuuKho";
                DateTime dtNgayNhoNhat = DateTime.Parse(cn.LayDuLieu(sql));

                if (dtpNgayLap.Value > DateTime.Now || dtpNgayLap.Value < dtNgayNhoNhat)
                {
                    MessageBox.Show("Ngày lập phiếu không hợp lý", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    dtpNgayLap.Focus();
                    kt = false;
                }
            }
            foreach (DataGridViewRow dgvr in dtgChiTietVatTu.Rows)
            {
                if (dgvr.IsNewRow) continue;
                if (dgvr.Cells["VatTu"].Value == null)
                {
                    dgvr.Cells["VatTu"].ErrorText = "Lỗi: " + dtgChiTietVatTu.Columns[dgvr.Cells["VatTu"].ColumnIndex].HeaderText + " chưa nhập ";
                    kt = false;
                }
                else
                {
                    dgvr.Cells["VatTu"].ErrorText = "";
                    if (dgvr.Cells["DonViTinh"].Value == null)
                    {
                        dgvr.Cells["DonViTinh"].ErrorText = "Lỗi: " + dtgChiTietVatTu.Columns[dgvr.Cells["DonViTinh"].ColumnIndex].HeaderText + " chưa nhập ";
                        kt = false;
                    }
                    else
                    {
                        dgvr.Cells["DonViTinh"].ErrorText = "";
                        if (kiem_tra_lap_vat_tu(dgvr.Index) == false)
                        {
                            kt = false;
                        }
                    }
                }

                float SoLuongPhePham = 0;
                string strSoLuongThanhLy;
                float SoLuongThanhLy = 0;

                if (dgvr.Cells["SoluongPhePham"].Value == null)
                {
                    dgvr.Cells["SoluongPhePham"].ErrorText = "Lỗi: " + dtgChiTietVatTu.Columns[dgvr.Cells["SoluongPhePham"].ColumnIndex].HeaderText + " chưa hiển thị";
                    kt = false;
                }
                else
                {
                    SoLuongPhePham = float.Parse(dgvr.Cells["SoLuongPhePham"].Value.ToString());
                    dgvr.Cells["SoluongPhePham"].ErrorText = "";
                }

                if (dgvr.Cells["SoluongThanhLy"].Value == null || dgvr.Cells["SoluongThanhLy"].Value.ToString() == "")
                {
                    dgvr.Cells["SoluongThanhLy"].ErrorText = "Lỗi: " + dtgChiTietVatTu.Columns[dgvr.Cells["SoluongThanhLy"].ColumnIndex].HeaderText + " chưa nhập";
                    kt = false;
                }
                else
                {
                    if (dgvr.Cells["SoluongThanhLy"].Value.ToString().Contains(','))
                    {
                        strSoLuongThanhLy = dgvr.Cells["SoluongThanhLy"].Value.ToString().Replace(',', '.');
                    }
                    else
                    {
                        strSoLuongThanhLy = dgvr.Cells["SoluongThanhLy"].Value.ToString();
                    }

                    float.TryParse(strSoLuongThanhLy, out SoLuongThanhLy);

                    if (SoLuongThanhLy <= 0)
                    {
                        dgvr.Cells["SoluongThanhLy"].ErrorText = "Lỗi: " + dtgChiTietVatTu.Columns[dgvr.Cells["SoLuongThanhLy"].ColumnIndex].HeaderText + " không được nhỏ hơn hoặc bằng 0 ";
                        kt = false;
                    }
                    else
                    {
                        dgvr.Cells["SoluongThanhLy"].ErrorText = "";
                    }
                }
                if (SoLuongThanhLy > SoLuongPhePham)
                {
                    dgvr.Cells["SoLuongThanhLy"].ErrorText = "Lỗi: " + dtgChiTietVatTu.Columns[dgvr.Cells["SoLuongThanhLy"].ColumnIndex].HeaderText + " phải nhỏ hơn hoặc bằng số lượng phế phẩm tồn kho";
                    kt = false;
                }

            }
            return kt;
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            if (IsValid())
            {
                string sql = "";
                string MaDonViTinh = "";
                byte XacNhan = 0;
                if (cbbXacNhan.Text == "Đã xác nhân")
                {
                    XacNhan = 1;
                }

                if (MaPhieuXuat == "")
                {
                    cn.Insert_Table("tbl_PhieuXuatKho", "SoPhieu,NgayXuat,MaDoiTac,MaKho,NguoiXuat,DienGiai,MaLoaiPhieu,XacNhan", "'" + txtSoPhieu.Text + "','" + dtpNgayLap.Value.ToString("yyyy-MM-dd") + "','" + cbbDoiTac.SelectedValue.ToString() + "','" + cbbKhoXuat.SelectedValue.ToString() + "',N'" + txtNhanVien.Text + "',N'" + txtDienGiai.Text + "','" + cbbLoaiPhieu.SelectedValue.ToString() + "','"+XacNhan+"'");
                    foreach (DataGridViewRow dgvr in dtgChiTietVatTu.Rows)
                    {
                        if (dgvr.IsNewRow) continue;

                        string strSoLuongThanhLy;
                        float SoLuongThanhLy = 0;

                        if (dgvr.Cells["SoLuongThanhLy"].Value.ToString().Contains(','))
                        {
                            strSoLuongThanhLy = dgvr.Cells["SoLuongThanhLy"].Value.ToString().Replace(',', '.');
                        }
                        else
                        {
                            strSoLuongThanhLy = dgvr.Cells["SoLuongThanhLy"].Value.ToString();
                        }
                        float.TryParse(strSoLuongThanhLy, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuongThanhLy);

                        sql = "select MaDonViTinh from tbl_VatTu where MaVatTu='" + dgvr.Cells["VatTu"].Value.ToString() + "'";
                        DataTable dt = cn.getTable(sql);
                        if (dt.Rows.Count > 0)
                        {
                            MaDonViTinh = dt.Rows[0]["MaDonViTinh"].ToString();
                        }

                        cn.Insert_Table("tbl_ChiTietPhieuXuat", "SoPhieu,MaVatTu,MaDonViTinh,SoLuong,SoLuongPhePham", "'" + txtSoPhieu.Text + "','" + dgvr.Cells["VatTu"].Value.ToString() + "','" + MaDonViTinh + "',0,'" + SoLuongThanhLy.ToString().Replace(",", ".") + "'");

                        if (XacNhan == 1)
                        {
                            float SoLuongPhePham = -SoLuongThanhLy;
                            cn.Insert_Table("tbl_LuuKho", "SoPhieu,MaKho,MaVatTu,SoLuong,SoLuongPhePham,NgayCapNhat", "'" + txtSoPhieu.Text + "','" + cbbKhoXuat.SelectedValue.ToString() + "','" + dgvr.Cells["VatTu"].Value.ToString() + "','0','" + SoLuongPhePham.ToString().Replace(",", ".") + "','" + dtpNgayLap.Value.ToString("yyyy-MM-dd") + "'");
                        }
                    }
                    HangSo.Luu_Hanh_Dong(HangSo.TenDangNhap, HangSo.TenQuyenHan, HangSo.TenNguoiDung, "Thêm phiếu xuất khách hàng.");
                    MessageBox.Show("Cập nhật thành công");
                }
                else
                {
                    cn.Update_Table("tbl_PhieuXuatKho", "NgayXuat='" + dtpNgayLap.Value.ToString("yyyy-MM-dd") + "',MaDoiTac='" + cbbDoiTac.SelectedValue.ToString() + "',NguoiXuat=N'" + txtNhanVien.Text + "',DienGiai=N'" + txtDienGiai.Text + "',XacNhan='"+XacNhan+"'", "SoPhieu='" + txtSoPhieu.Text + "'");
                    cn.Delete_Table("tbl_ChiTietPhieuXuat", "SoPhieu='" + txtSoPhieu.Text + "'");
                    cn.Delete_Table("tbl_LuuKho", "SoPhieu='" + txtSoPhieu.Text + "'");

                    foreach (DataGridViewRow dgvr in dtgChiTietVatTu.Rows)
                    {
                        if (dgvr.IsNewRow) continue;

                        string strSoLuongThanhLy;
                        float SoLuongThanhLy = 0;

                        if (dgvr.Cells["SoLuongThanhLy"].Value.ToString().Contains(','))
                        {
                            strSoLuongThanhLy = dgvr.Cells["SoLuongThanhLy"].Value.ToString().Replace(',', '.');
                        }
                        else
                        {
                            strSoLuongThanhLy = dgvr.Cells["SoLuongThanhLy"].Value.ToString();
                        }
                        float.TryParse(strSoLuongThanhLy, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuongThanhLy);

                        sql = "select MaDonViTinh from tbl_VatTu where MaVatTu='" + dgvr.Cells["VatTu"].Value.ToString() + "'";
                        DataTable dt = cn.getTable(sql);
                        if (dt.Rows.Count > 0)
                        {
                            MaDonViTinh = dt.Rows[0]["MaDonViTinh"].ToString();
                        }

                        cn.Insert_Table("tbl_ChiTietPhieuXuat", "SoPhieu,MaVatTu,MaDonViTinh,SoLuong,SoLuongPhePham", "'" + txtSoPhieu.Text + "','" + dgvr.Cells["VatTu"].Value.ToString() + "','" + MaDonViTinh + "',0,'" + SoLuongThanhLy.ToString().Replace(",", ".") + "'");

                        if (XacNhan == 1)
                        {
                            float SoLuongPhePham = -SoLuongThanhLy;
                            cn.Insert_Table("tbl_LuuKho", "SoPhieu,MaKho,MaVatTu,SoLuong,SoLuongPhePham,NgayCapNhat", "'" + txtSoPhieu.Text + "','" + cbbKhoXuat.SelectedValue.ToString() + "','" + dgvr.Cells["VatTu"].Value.ToString() + "','0','" + SoLuongPhePham.ToString().Replace(",", ".") + "','" + dtpNgayLap.Value.ToString("yyyy-MM-dd") + "'");
                        }
                    }
                    HangSo.Luu_Hanh_Dong(HangSo.TenDangNhap, HangSo.TenQuyenHan, HangSo.TenNguoiDung, "Sửa phiếu xuất thanh lý.");
                    MessageBox.Show("Cập nhật thành công");
                }
                this.Close();
            }
            
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (dtgChiTietVatTu.Rows.Count > 0)
            {
                for (int i = dtgChiTietVatTu.Rows.Count - 1; i >= 0; i--)
                {
                    if ((bool)dtgChiTietVatTu.Rows[i].Cells[0].FormattedValue) dtgChiTietVatTu.Rows.RemoveAt(i); 
                }
            }
        }

        private void btnHuy_Click(object sender, EventArgs e)
        {
            dtgChiTietVatTu.Rows.Clear();
        }

        private void dtgChiTietVatTu_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (dtgChiTietVatTu.Rows.Count > 0 && e.RowIndex != -1)
            {
                btnThem.Enabled = true;
                string sql = "";

                if (e.ColumnIndex == 1 && dtgChiTietVatTu.Rows[e.RowIndex].Cells[1].Value != null)
                {
                    sql = @"SELECT     dbo.tbl_DonViTinh.TenDonViTinh
                            FROM         dbo.tbl_DonViTinh INNER JOIN
                                                  dbo.tbl_VatTu ON dbo.tbl_DonViTinh.MaDonViTinh = dbo.tbl_VatTu.MaDonViTinh
                            WHERE     dbo.tbl_VatTu.MaVatTu ='" + dtgChiTietVatTu.Rows[e.RowIndex].Cells[1].Value.ToString() + "'";
                    DataGridViewTextBoxCell TenDonViTinh = (DataGridViewTextBoxCell)dtgChiTietVatTu.Rows[e.RowIndex].Cells[2];
                    TenDonViTinh.Value = cn.LayDuLieu(sql);

                    sql = "select sum(SoLuongPhePham) as SoLuonTonKho from tbl_LuuKho where MaKho='" + cbbKhoXuat.SelectedValue.ToString() + "' and MaVatTu='" + dtgChiTietVatTu.Rows[e.RowIndex].Cells[1].Value.ToString() + "'";
                    string strSoLuongTonKho = cn.LayDuLieu(sql);
                    float SoLuongTonKho = 0;

                    if (strSoLuongTonKho != null && strSoLuongTonKho != "" && float.Parse(strSoLuongTonKho) > 0) SoLuongTonKho = float.Parse(strSoLuongTonKho);
                    DataGridViewTextBoxCell txtSoLuongTonKho = (DataGridViewTextBoxCell)dtgChiTietVatTu.Rows[e.RowIndex].Cells[3];
                    txtSoLuongTonKho.Value = null;
                    txtSoLuongTonKho.Value = SoLuongTonKho;

                    foreach (DataGridViewRow dgvr in dtgChiTietVatTu.Rows)
                    {
                        if (dgvr.IsNewRow) continue;

                        if (dgvr.Index != e.RowIndex && dgvr.Cells[1].Value != null && dgvr.Cells[1].Value.ToString() == dtgChiTietVatTu.Rows[e.RowIndex].Cells[1].Value.ToString())
                        {
                            dgvr.Cells[1].ErrorText = "Lỗi: " + dtgChiTietVatTu.Columns[1].HeaderText + " đã được chọn ";
                            dtgChiTietVatTu.Rows[e.RowIndex].Cells[1].ErrorText = "Lỗi: " + dtgChiTietVatTu.Columns[1].HeaderText + " đã được chọn ";
                        }
                        else
                        {
                            dgvr.Cells[1].ErrorText = "";
                            dtgChiTietVatTu.Rows[e.RowIndex].Cells[1].ErrorText = "";
                        }
                    }
                }
            }
        }

        private void cbbKhoXuat_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbbKhoXuat.SelectedValue != null)
            {
                string sql = "";
                foreach (DataGridViewRow dgvr in dtgChiTietVatTu.Rows)
                {
                    if (dgvr.IsNewRow) continue;
                    if (dgvr.Cells[1].Value != null && dgvr.Cells[2].Value != null)
                    {
                        sql = @"
                            SELECT     SUM(SoLuongPhePham) as SoLuongTonKho
                            FROM         dbo.tbl_LuuKho
                            WHERE MaKho = '" + cbbKhoXuat.SelectedValue + "' AND MaVatTu = '" + dgvr.Cells[1].Value.ToString() + "'";
                        string strSoLuong = cn.LayDuLieu(sql);
                        float SoLuongTonKho = 0;
                        if (strSoLuong != null && strSoLuong != "" && float.Parse(strSoLuong) > 0) SoLuongTonKho = float.Parse(strSoLuong);
                        dgvr.Cells[3].Value = SoLuongTonKho;
                    }
                }
            }
        }
    }
}
